/*************************************************************************************
 * Nombre del archivo: Cola.java
 * Universidad del Valle de Guatemala
 * Curso: Sistemas Operativos
 * @author martin
 *          Martín Guzmán 08041
 * Fecha: Febrero de 2010
 * Descripción:
*************************************************************************************/

import java.util.LinkedList;

public class Cola<G> {

    private LinkedList<G> lista = new LinkedList<G>();

    public Cola(){

    }

    /***********************************************
     * Método: peek
     * Uso: retorna el primer elemento de la lista
     * @return G elemento genérico
    ***********************************************/
    public G peek(){
        if(!lista.isEmpty()){
            return lista.getFirst();
        }
        return null;
    }

    /***********************************************
     * Método: peek
     * Uso: retorna el primer elemento de la lista
     * @return G elemento genérico
    ***********************************************/
    public G poll(){
        if(!lista.isEmpty()){
            G temp = lista.getFirst();
            lista.removeFirst();
            return temp;
        }
        return null;
    }

    /***********************************************
     * Método: isEmpty
     * Uso: retorna si la cola está vacía
     * @return G elemento genérico
    ***********************************************/
    public boolean isEmpty(){
        if(lista.isEmpty()){
            return true;
        }
        return false;
    }

    /***********************************************
     * Método: remove
     * Uso: retorna si la cola está vacía
     * @return void
    ***********************************************/
    public void remove(G objeto){
        this.lista.remove(objeto);
    }

    /***********************************************
     * Método: getCola
     * Uso: retorna una lista con la cola
     * @return LinkedList<G> contiene la cola
    ***********************************************/
    public LinkedList<G> getCola(){
        return this.lista;
    }

    /***********************************************
     * Método: getFirst
     * Uso: obtiene el primer elemento de la cola
     * @return G con el primer objeto de la cola
    ***********************************************/
    public G getFirst(){
        return this.lista.getFirst();
    }

    /***********************************************
     * Método: get
     * Uso: obtiene el elemento especificado
     * @return G con el elemento de la cola...
    ***********************************************/
    public G get(int i){
        return this.lista.get(i);
    }

    /***********************************************
     * Método: getLast
     * Uso: obtiene el último elemento de la cola
     * @return G con el último objeto de la cola
    ***********************************************/
    public G getLast(){
        return this.lista.getLast();
    }

    /***********************************************
     * Método: getCola
     * Uso: retorna una lista con la cola
     * @return LinkedList<G> contiene la cola
    ***********************************************/
    public void add(G nuevo){
        this.lista.add(nuevo);
    }

}
